package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


public interface ManageService {
    List<BaseCategory1> getCategory1();

    List<BaseCategory2> getCategory2(Long category1Id);

    List<BaseCategory3> getCategory3(Long category2Id);

    List<BaseAttrInfo> attrInfoList(
            @Param("category1Id") Long category1Id,
            @Param("category2Id") Long category2Id,
            @Param("category3Id") Long category3Id);



    // 保存平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);
    //品牌列表查询 分页
    IPage baseTrademark(Integer page, Integer limit);
    //获取商品集合分页查询
    IPage findSpuList(Integer page, Integer limit, Long category3Id);
    //查询所有品牌列表
    List<BaseTrademark> getTrademarkList();
    //查询销售属性列表
    List<BaseSaleAttr> baseSaleAttrList();


    //保存 SPU
    void saveSpuInfo(SpuInfo spuInfo);
    //根据spuId 查询获取图片列表
    List<SpuImage> spuImageList(Long spuId);
    //根据spuId获取销售属性及属性值表
    List<SpuSaleAttr> spuSaleAttrList(Long spuId);


    //保存 SKU
    void saveSkuInfo(SkuInfo skuInfo);
    //查询 sku 分页列表
    IPage skuList(Integer page, Integer limit);
    //上架
    void onSale(Long skuId);
    //下架
    void cancelSale(Long skuId);


    //1、根据三级分类 Id 查询 一二查询分类
    BaseCategoryView getBaseCategoryView(Long category3Id);
    //2、查询Sku中的信息  sku_info  查询Sku中的图片  sku_image
    SkuInfo getSkuInfo(Long skuId);
    //3、单独查询价格
    BigDecimal getPrice(Long skuId);



    //4、查询Spu中的总销售属性 及属性值   同时选中一个默认商品（SQL相当难度）
    List<SpuSaleAttr> getSaleAttrAndValeAndChecked(Long skuId, Long spuId);
    //5、查询页面上 组合与skuId之间关系   ：  {1|5|7 ： skuId,1|4|7 ： skuId,...} json格式的字符串
    Map<String, String> getSkuValueIdsMap(Long spuId);
    //查询所有一二三级分类视图
    List<BaseCategoryView> getBaseCategoryViewList();
    //根据tmId  查询一个品牌
    BaseTrademark getBaseTrademark(Long tmId);
    //据skuId 查询 sku_attr_value   base_attr_info  base_attr_value
    List<SkuAttrValue> getSkuAttrValue(Long skuId);
}
